]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Revert "panel: programmatic anim. control of AnimatedIcon"
authorJasper St. Pierre <jstpierre@mecheye.net>
Mon, 5 Nov 2012 19:31:04 +0000 (14:31 -0500)
committerJasper St. Pierre <jstpierre@mecheye.net>
Mon, 5 Nov 2012 19:31:04 +0000 (14:31 -0500)
This reverts commit e04a4c39231ea1418591446d9b98aad4d7bcd2de.

This commit exposed an already-existing race condition in the panel
animation code that caused the shell to crash for some people.

https://bugzilla.gnome.org/show_bug.cgi?id=687112

js/ui/panel.js

index 2c3fc89a659a722bf9fbdd5238b4e7fdee5b2709..9f36963465d28e8842b8f205f63d2e30caef3e9e 100644 (file)
@@ -82,27 +82,28 @@ const AnimatedIcon = new Lang.Class({
     _init: function(name, size) {
         this.actor = new St.Bin({ visible: false });
         this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
+        this.actor.connect('notify::visible', Lang.bind(this, this._onVisibleNotify));
 
         this._timeoutId = 0;
         this._frame = 0;
         this._animations = St.TextureCache.get_default().load_sliced_image (global.datadir + '/theme/' + name, size, size);
         this.actor.set_child(this._animations);
-
-        this._update();
-    },
-
-    start: function() {
-        if (this._timeoutId == 0)
-            this._timeoutId = Mainloop.timeout_add(ANIMATED_ICON_UPDATE_TIMEOUT, Lang.bind(this, this._update));
     },
 
-    stop: function() {
+    _disconnectTimeout: function() {
         if (this._timeoutId > 0) {
             Mainloop.source_remove(this._timeoutId);
             this._timeoutId = 0;
         }
     },
 
+    _onVisibleNotify: function() {
+        if (this.actor.visible)
+            this._timeoutId = Mainloop.timeout_add(ANIMATED_ICON_UPDATE_TIMEOUT, Lang.bind(this, this._update));
+        else
+            this._disconnectTimeout();
+    },
+
     _showFrame: function(frame) {
         let oldFrameActor = this._animations.get_child_at_index(this._frame);
         if (oldFrameActor)
@@ -121,7 +122,7 @@ const AnimatedIcon = new Lang.Class({
     },
 
     _onDestroy: function() {
-        this.stop();
+        this._disconnectTimeout();
     }
 });
 
@@ -366,7 +367,6 @@ const AppMenuButton = new Lang.Class({
                            transition: "easeOutQuad",
                            onCompleteScope: this,
                            onComplete: function() {
-                               this._spinner.stop();
                                this._spinner.actor.opacity = 255;
                                this._spinner.actor.hide();
                            }
@@ -376,7 +376,6 @@ const AppMenuButton = new Lang.Class({
     startAnimation: function() {
         this._stop = false;
         this.actor.reactive = false;
-        this._spinner.start();
         this._spinner.actor.show();
     },